JavaScript এর Asynchronous Programming: Callbacks, Promises, এবং Async/Await

Computer Programming - নোড জেএস (Node.js) JavaScript রিভিউ (JavaScript Review for Node.js) |
169
169

JavaScript একটি ইভেন্ট-ড্রিভেন এবং অ্যাসিনক্রোনাস প্রোগ্রামিং ভাষা। এর মানে হল যে, JavaScript একাধিক কাজ একসাথে করতে সক্ষম (যেমন ডেটাবেস থেকে তথ্য আনা, ফাইল পড়া, বা API কল করা) এবং এটি **অ্যাসিনক্রোনাস (Asynchronous)**ভাবে কাজ করে, যার মাধ্যমে কোডের অন্যান্য অংশ একে অপরকে ব্লক না করে কার্যকরীভাবে চালানো যায়।

এই অ্যাসিনক্রোনাস কার্যক্রমগুলো সাধারণত তিনটি প্রধান কৌশল দ্বারা পরিচালিত হয়:

  1. Callbacks
  2. Promises
  3. Async/Await

এখানে আমরা প্রতিটি কৌশল সম্পর্কে বিস্তারিতভাবে আলোচনা করব।


১. Callbacks

Callback হল একটি ফাংশন যা অন্য একটি ফাংশনের প্যারামিটার হিসেবে পাস করা হয় এবং মূল ফাংশনটির কার্যক্রম শেষ হওয়ার পর সেটি কল (বা ট্রিগার) করা হয়। JavaScript এ অ্যাসিনক্রোনাস ফাংশনের জন্য callback ব্যবহার করা হয়, যেমন ফাইল পড়া, নেটওয়ার্ক কল করা বা টাইমআউট ব্যবস্থাপনা।

উদাহরণ:

// একটি সিম্পল callback ফাংশন
function fetchData(callback) {
    setTimeout(() => {
        const data = "Data fetched";
        callback(data); // Callback ফাংশন কল করা
    }, 2000);
}

function processData(data) {
    console.log("Processing: " + data);
}

fetchData(processData);  // Callback ফাংশন পাস করা

এখানে fetchData ফাংশনটি একটি ডেটা ফেরত দেয়, এবং যখন সেটি ফেরত আসে, তখন processData callback ফাংশনটি ট্রিগার হয়।

সমস্যা:

Callbacks সাধারণত Callback Hell তৈরি করতে পারে, যেখানে একাধিক কলব্যাক ফাংশন একে অপরের মধ্যে nest হয়ে যায়, এবং কোড আরও জটিল হয়ে যায়।


২. Promises

Promise হল একটি JavaScript অবজেক্ট যা ভবিষ্যতে একটি অ্যাসিনক্রোনাস অপারেশনের ফলাফল বা ত্রুটি উপস্থাপন করে। এটি অ্যাসিনক্রোনাস কাজের জন্য একটি পরিষ্কার এবং পরিচালনাযোগ্য পদ্ধতি প্রদান করে। Promise একটি অবজেক্ট হতে পারে যা fulfilled (সফল), rejected (ব্যর্থ), বা pending (অপেক্ষমাণ) অবস্থায় থাকে।

উদাহরণ:

// Promise ব্যবহার
function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const data = "Data fetched";
            resolve(data);  // Promise সফল হলে
        }, 2000);
    });
}

fetchData().then(data => {
    console.log("Processing: " + data);
}).catch(error => {
    console.log("Error: " + error);
});

এখানে, fetchData একটি Promise ফেরত দেয়। যখন এটি সফলভাবে কাজ সম্পন্ন করে, তখন .then() ব্লকটি কল হয়, এবং যদি কোনো ত্রুটি ঘটে তবে .catch() ব্লকটি কল হয়।

সুবিধা:

  • Callback Hell সমস্যা কমায়।
  • কন্ট্রোল স্ট্রাকচার পরিষ্কার এবং সহজে বুঝতে সুবিধাজনক।
  • একাধিক অ্যাসিনক্রোনাস অপারেশন একসাথে পরিচালনা করতে .all(), .race() ইত্যাদি ব্যবহার করা যায়।

৩. Async/Await

Async/Await হল ES2017 (ES8) তে পরিচিত একটি সিনট্যাক্স যা Promises ব্যবহারের উপর ভিত্তি করে কাজ করে, তবে এটি আরও সরল এবং সিনক্রোনাস কোডের মতো দেখতে হয়। async ফাংশনটি একটি Promise ফেরত দেয় এবং await কিওয়ার্ডটি Promise এর ফলাফল পাওয়ার জন্য অপেক্ষা করে।

উদাহরণ:

// Async/Await ব্যবহার
async function fetchData() {
    const data = await new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Data fetched");
        }, 2000);
    });
    console.log("Processing: " + data);
}

fetchData();

এখানে, fetchData একটি async ফাংশন, এবং await এর মাধ্যমে Promise এর ফলাফল আসা পর্যন্ত কোড অপেক্ষা করে, যা সিনক্রোনাস কোডের মতো মনে হয়, তবে আসলে এটি অ্যাসিনক্রোনাস।

সুবিধা:

  • কোডটি সহজ এবং পড়তে সহজ।
  • Callback Hell এবং Promise chaining এর থেকে মুক্তি দেয়।
  • কোড আরও পরিষ্কার এবং ডিজাইন করার সময় কমপ্লেক্সিটি কম হয়।

Callbacks, Promises, এবং Async/Await এর তুলনা

বৈশিষ্ট্যCallbacksPromisesAsync/Await
অ্যাসিনক্রোনাস প্রোগ্রামিংহ্যাঁ, তবে callback hell তৈরি হতে পারেহ্যাঁ, তবে chaining এর মাধ্যমে কাজ করা যায়হ্যাঁ, সহজ এবং পরিষ্কারভাবে ব্যবহার করা যায়
প্রবাহ নিয়ন্ত্রণNested, জটিল হতে পারে.then() এবং .catch() এর মাধ্যমে পরিচালিতawait ব্যবহার করে সাধারণ সিনক্রোনাস কোডের মতো পরিচালিত
কোডের জটিলতাজটিল, code structure পরিষ্কার নয়মাঝামাঝি, তবে .then() এবং .catch() এর মাধ্যমে পরিষ্কার হয়পরিষ্কার, সিনক্রোনাস কোডের মতো
ফলাফলসরাসরি ফেরত দেয় নাPromise (fulfilled বা rejected) ফেরত দেয়Promise ফেরত দেয়, তবে await দ্বারা ফলাফল পাওয়া যায়
সহজতাবেশি জটিল এবং অভ্যস্ত হতে পারেতুলনামূলক সহজ, তবে chaining হয়সবচেয়ে সহজ, সিনক্রোনাস কোডের মতো

সারাংশ

  • Callbacks: একটি ফাংশন যা অন্য ফাংশনের শেষে কল করা হয়। তবে এটি Callback Hell তৈরি করতে পারে।
  • Promises: অ্যাসিনক্রোনাস কাজের জন্য একটি পরিষ্কার এবং ব্যবস্থাপনারযোগ্য সমাধান। এটি কন্ট্রোল স্ট্রাকচার পরিষ্কার করে এবং .then(), .catch() ব্যবহার করে ফলাফল বা ত্রুটি পরিচালনা করা যায়।
  • Async/Await: Promises এর ওপর ভিত্তি করে, যা কোড লেখার জন্য একটি সহজ এবং সোজা পদ্ধতি প্রদান করে। এটি সিনক্রোনাস কোডের মতো দেখায়, তবে এটি অ্যাসিনক্রোনাস অপারেশন পরিচালনা করে।

Async/Await সাধারণত সবচেয়ে ভালো পদ্ধতি হিসাবে বিবেচিত হয় কারণ এটি কোড লেখার সময় সর্বাধিক সহজ এবং পরিষ্কার।

Content added By
Promotion